#!/bin/bash

# 确保脚本以root权限运行（需要安装依赖）
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用sudo运行此脚本：sudo ./package_pdf_editor.sh"
    exit 1
fi

# 安装系统依赖
#echo "=== 安装系统依赖 ==="
#apt update -y
#apt install -y python3 python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools


# 获取实际用户的家目录（即使在sudo下也能正确获取）
if [ -n "$SUDO_USER" ]; then
    # 当使用sudo时，获取原始用户的家目录
    REAL_HOME=$(eval echo ~$SUDO_USER)
else
    # 非sudo时直接使用当前用户的家目录
    REAL_HOME=$HOME
fi

# 尝试手动定位conda（使用实际用户的家目录）
find_conda() {
    # 使用实际用户目录构建可能的conda路径
    local path1="$REAL_HOME/miniconda3/bin/conda"
    local path2="$REAL_HOME/anaconda3/bin/conda"
    local path3="$REAL_HOME/miniconda/bin/conda"
    local path4="$REAL_HOME/anaconda/bin/conda"
    local path5="/opt/anaconda3/bin/conda"
    local path6="/opt/miniconda3/bin/conda"

    # 逐个检查路径
    if [ -f "$path1" ] && [ -x "$path1" ]; then
        echo "$path1"
        return 0
    elif [ -f "$path2" ] && [ -x "$path2" ]; then
        echo "$path2"
        return 0
    elif [ -f "$path3" ] && [ -x "$path3" ]; then
        echo "$path3"
        return 0
    elif [ -f "$path4" ] && [ -x "$path4" ]; then
        echo "$path4"
        return 0
    elif [ -f "$path5" ] && [ -x "$path5" ]; then
        echo "$path5"
        return 0
    elif [ -f "$path6" ] && [ -x "$path6" ]; then
        echo "$path6"
        return 0
    fi

    # 最后的尝试：直接使用你提供的路径
    local manual_path="$REAL_HOME/miniconda3/bin/conda"
    if [ -f "$manual_path" ] && [ -x "$manual_path" ]; then
        echo "$manual_path"
        return 0
    fi

    return 1
}

# 定位conda可执行文件
CONDA_PATH=$(find_conda)
if [ -z "$CONDA_PATH" ]; then
    echo "错误：未找到conda！"
    echo "检测到的用户目录：$REAL_HOME"
    echo "请确认conda安装在：$REAL_HOME/miniconda3/bin/conda"
    exit 1
fi

# 提取conda根目录（bin目录的上一级）
CONDA_ROOT=$(dirname "$(dirname "$CONDA_PATH")")
echo "=== 找到conda：$CONDA_ROOT ==="

# 手动加载conda配置
if [ -f "$CONDA_ROOT/etc/profile.d/conda.sh" ]; then
    source "$CONDA_ROOT/etc/profile.d/conda.sh"
else
    echo "错误：未找到conda配置文件，可能安装不完整"
    exit 1
fi

# 检查pyqt_env环境是否存在
if ! conda env list | grep -q "pyqt_env"; then
    echo "错误：未找到pyqt_env环境，请先创建该环境并安装所需依赖，如："
    echo "创建环境命令：conda create -n pyqt_env python=3.9"
    echo "安装依赖命令：conda activate pyqt_env && pip install pyinstaller PyQt5 PyMuPDF"
    echo "具体命令参考：readme.md"
    exit 1
fi

# 激活目标环境
echo -e "\n=== 激活pyqt_env环境 ==="
conda activate pyqt_env || {
    echo "激活pyqt_env环境失败，请手动激活后重新运行脚本："
    echo "conda activate pyqt_env && sudo bash package_pdf_editor.sh"
    exit 1
}

# 检查环境中的关键依赖
echo -e "\n=== 检查依赖 ==="
if ! command -v pyinstaller &> /dev/null; then
    echo "错误：pyqt_env环境中未安装pyinstaller"
    echo "请在环境中执行：pip install pyinstaller"
    exit 1
fi

if ! python -c "import PyQt5" &> /dev/null; then
    echo "错误：pyqt_env环境中未安装PyQt5"
    echo "请在环境中执行：pip install PyQt5"
    exit 1
fi

if ! python -c "import fitz" &> /dev/null; then
    echo "错误：pyqt_env环境中未安装PyMuPDF"
    echo "请在环境中执行：pip install PyMuPDF"
    exit 1
fi

# 检查项目结构
if [ ! -f "main.py" ] || [ ! -d "ui" ]; then
    echo -e "\n错误：未找到项目文件！"
    echo "请确保脚本在项目根目录运行，且存在main.py和ui目录"
    exit 1
fi

# 创建打包输出目录
mkdir -p dist build

# 使用conda环境中的pyinstaller打包
echo -e "\n=== 开始打包 ==="
pyinstaller --onefile \
            --name "pdf_editor" \
            --distpath "dist" \
            --workpath "build" \
            --hidden-import "PyQt5.sip" \
            --hidden-import "fitz" \
            --add-data "ui/*.py:ui" \
            main.py

# 检查打包结果
if [ -f "dist/pdf_editor" ]; then
    echo -e "\n=== 打包成功！ ==="
    echo "可执行文件位置：$(pwd)/dist/pdf_editor"
    echo "运行方式：./dist/pdf_editor"
else
    echo -e "\n=== 打包失败 ==="
    exit 1
fi
    
